package com.wicket.okrbff.web.contorller;

import cn.hutool.core.bean.BeanUtil;
import com.wicket.okrbff.biz.service.FinanceService;
import com.wicket.okrbff.biz.service.dto.req.*;
import com.wicket.okrbff.biz.service.dto.res.*;
import com.wicket.okrbff.common.ro.OkrResult;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import java.util.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.wicket.okrfinance.integration.FwFinanceFinanceClient;
import com.wicket.okrfinance.integration.dto.QueryPlanUseBudgetAccountCapitalSourceListRespDto;
import com.wicket.okrfinance.integration.dto.QueryPlanUseBudgetAccountCapitalSourceListReqDto;
import com.wicket.okrbff.biz.service.dto.common.BffPlanUseBudgetAccountCapitalSourceDto;
import java.util.stream.Collectors;
import cn.hutool.core.collection.CollectionUtil;
import com.wicket.okrfinance.integration.dto.QueryAccountCapitalSourceListRespDto;
import com.wicket.okrfinance.integration.dto.QueryAccountCapitalSourceListReqDto;
import com.wicket.okrbff.biz.service.dto.common.BffAccountCapitalSourceDto;
import com.wicket.okrbff.common.exception.Assert;
import com.wicket.okrframework.integration.FwBaseInductionRecordClient;
import com.wicket.okrframework.integration.dto.BatchQueryInductionRecordListComRespDto;
import com.wicket.okrframework.integration.dto.BatchQueryInductionRecordListComReqDto;
import com.wicket.okrfinance.integration.dto.AddAccountCapitalSourceRespDto;
import com.wicket.okrfinance.integration.dto.AddAccountCapitalSourceReqDto;
import com.wicket.okrapp.integration.FwAppFinanceClient;
import com.wicket.okrapp.integration.dto.ImplementTargetBudgetSetComRespDto;
import com.wicket.okrapp.integration.dto.ImplementTargetBudgetSetComReqDto;
import com.wicket.okrapp.integration.dto.TargetBudgetSetDto;
import com.wicket.okrapp.integration.dto.QueryTargetParentCycleBudgetSetDetailRespDto;
import com.wicket.okrapp.integration.dto.QueryTargetParentCycleBudgetSetDetailReqDto;
import com.wicket.okrapp.integration.dto.QueryTargetCycleAndSourceBudgetSetListRespDto;
import com.wicket.okrapp.integration.dto.QueryTargetCycleAndSourceBudgetSetListReqDto;
import com.wicket.okrbff.biz.service.dto.common.BffTargetBudgetSetDto;
import com.wicket.okrcomponent.integration.FwCompDivineDataClient;
import com.wicket.okrfinance.integration.dto.QueryAccountCapitalSourceListComRespDto;
import com.wicket.okrfinance.integration.dto.QueryAccountCapitalSourceListComReqDto;
import com.wicket.okrcomponent.integration.dto.QueryOutputParametersDetailComRespDto;
import com.wicket.okrcomponent.integration.dto.QueryOutputParametersDetailComReqDto;
import com.wicket.okrcomponent.integration.dto.AccountCapitalSourceDto;
import com.wicket.okrfinance.integration.dto.QueryTargetCycleBudgetSetSourceListComRespDto;
import com.wicket.okrfinance.integration.dto.QueryTargetCycleBudgetSetSourceListComReqDto;
import com.wicket.okrfinance.integration.dto.QuerySubBudgetSourceListComRespDto;
import com.wicket.okrfinance.integration.dto.QuerySubBudgetSourceListComReqDto;
import com.wicket.okrapp.integration.FwAppEvaThemeClient;
import com.wicket.okrapp.integration.dto.QueryEvaTempDetailRespDto;
import com.wicket.okrapp.integration.dto.QueryEvaTempDetailReqDto;
import com.wicket.okrapp.integration.dto.ImplementOpenOrCloseTargetBudgetRespDto;
import com.wicket.okrapp.integration.dto.ImplementOpenOrCloseTargetBudgetReqDto;
import com.wicket.okrfinance.integration.dto.AddAccountSubjectRespDto;
import com.wicket.okrfinance.integration.dto.AddAccountSubjectReqDto;
import com.wicket.okrapp.integration.dto.QueryTargetContentBudgetSubCycleListComRespDto;
import com.wicket.okrapp.integration.dto.QueryTargetContentBudgetSubCycleListComReqDto;
import com.wicket.okrbff.biz.service.dto.common.BffSubCycleDto;
import com.wicket.okrapp.integration.dto.QueryTargetContentBudgetStateDetailRespDto;
import com.wicket.okrapp.integration.dto.QueryTargetContentBudgetStateDetailReqDto;
import com.wicket.okrfinance.integration.dto.ImplementClearBudgetSourceSetComRespDto;
import com.wicket.okrfinance.integration.dto.ImplementClearBudgetSourceSetComReqDto;
import com.wicket.okrfinance.integration.dto.ImplementInitializeSourceBudgetSetRespDto;
import com.wicket.okrfinance.integration.dto.ImplementInitializeSourceBudgetSetReqDto;
import com.wicket.okrbff.biz.service.dto.common.BffTargetBudgetSourceDto;
//import com.wicket.okrfinance.integration.dto.AddAccountSubjectRespDto;
//import com.wicket.okrfinance.integration.dto.AddAccountSubjectReqDto;
//import com.wicket.okrfinance.integration.dto.QueryAccountSubjectListRespDto;
//import com.wicket.okrfinance.integration.dto.QueryAccountSubjectListReqDto;
//import com.wicket.okrfinance.integration.dto.QueryAccountSubjectDetailRespDto;
//import com.wicket.okrfinance.integration.dto.QueryAccountSubjectDetailReqDto;

/**
 * @author ：
 * @date ：
 *
 *
 * @version 1.0
 */
@Api(value = "Finance", tags = { "Finance" })
@RestController
// @RequestMapping("/oms/finance/")
public class FinanceController {

  @Autowired
  FinanceService financeService;
/**
   * B7查规划使用预算资金来源列表(边界)
   * gen by moon at 11/7/2023, 7:29:29 PM
   */
    @PostMapping("/oms/finance/queryPlanUseBudgetAccountCapitalSourceListBorder")
    @ApiOperation(value = "B7查规划使用预算资金来源列表(边界)", response = OkrResult.class)
    public OkrResult<BffQueryPlanUseBudgetAccountCapitalSourceListBorderRespDto> queryPlanUseBudgetAccountCapitalSourceListBorder(@RequestBody(required=false) @Validated BffQueryPlanUseBudgetAccountCapitalSourceListBorderReqDto reqDTO){
        return OkrResult.success(financeService.queryPlanUseBudgetAccountCapitalSourceListBorder(reqDTO));
    }
/**
   * B7查财务资金来源列表(边界)
   * gen by moon at 11/7/2023, 7:47:07 PM
   */
    @PostMapping("/oms/finance/queryAccountCapitalSourceListBorder")
    @ApiOperation(value = "B7查财务资金来源列表(边界)", response = OkrResult.class)
    public OkrResult<BffQueryAccountCapitalSourceListBorderRespDto> queryAccountCapitalSourceListBorder(@RequestBody(required=false) @Validated BffQueryAccountCapitalSourceListBorderReqDto reqDTO){
        return OkrResult.success(financeService.queryAccountCapitalSourceListBorder(reqDTO));
    }
/**
   * B7新增财务科目(管理)
   * gen by moon at 11/24/2023, 1:07:48 AM
   */
    @PostMapping("/oms/mgt/finance/addAccountSubject")
    @ApiOperation(value = "B7新增财务科目(管理)", response = OkrResult.class)
    public OkrResult<BffAddAccountSubjectRespDto> addAccountSubject(@RequestBody(required=false) @Validated BffAddAccountSubjectReqDto reqDTO){
        return OkrResult.success(financeService.addAccountSubject(reqDTO));
    }
/**
   * B7查财务科目列表(管理)
   * gen by moon at 11/24/2023, 1:07:57 AM
   */
    @PostMapping("/oms/mgt/finance/queryAccountSubjectList")
    @ApiOperation(value = "B7查财务科目列表(管理)", response = OkrResult.class)
    public OkrResult<BffQueryAccountSubjectListRespDto> queryAccountSubjectList(@RequestBody(required=false) @Validated BffQueryAccountSubjectListReqDto reqDTO){
        return OkrResult.success(financeService.queryAccountSubjectList(reqDTO));
    }
/**
   * B7查询财务科目详情(管理)
   * gen by moon at 11/24/2023, 1:08:04 AM
   */
    @PostMapping("/oms/mgt/finance/queryAccountSubjectDetail")
    @ApiOperation(value = "B7查询财务科目详情(管理)", response = OkrResult.class)
    public OkrResult<BffQueryAccountSubjectDetailRespDto> queryAccountSubjectDetail(@RequestBody(required=false) @Validated BffQueryAccountSubjectDetailReqDto reqDTO){
        return OkrResult.success(financeService.queryAccountSubjectDetail(reqDTO));
    }
/**
   * B7新增财务资金来源(管理)
   * gen by moon at 12/1/2023, 3:43:05 AM
   */
    @PostMapping("/oms/mgt/finance/addAccountCapitalSource")
    @ApiOperation(value = "B7新增财务资金来源(管理)", response = OkrResult.class)
    public OkrResult<BffAddAccountCapitalSourceRespDto> addAccountCapitalSource(@RequestBody(required=false) @Validated BffAddAccountCapitalSourceReqDto reqDTO){
        return OkrResult.success(financeService.addAccountCapitalSource(reqDTO));
    }
/**
   * B3执行目标预算设置
   * gen by moon at 2/4/2024, 2:06:25 AM
   */
    @PostMapping("/oms/finance/implementTargetBudgetSet")
    @ApiOperation(value = "B3执行目标预算设置", response = OkrResult.class)
    public OkrResult<BffImplementTargetBudgetSetRespDto> implementTargetBudgetSet(@RequestBody(required=false) @Validated BffImplementTargetBudgetSetReqDto reqDTO){
        return OkrResult.success(financeService.implementTargetBudgetSet(reqDTO));
    }
/**
   * B3查询目标内容父周期预算设置详情(管理)
   * gen by moon at 2/4/2024, 11:36:03 PM
   */
    @PostMapping("/oms/mgt/finance/queryTargetParentCycleBudgetSetDetail")
    @ApiOperation(value = "B3查询目标内容父周期预算设置详情(管理)", response = OkrResult.class)
    public OkrResult<BffQueryTargetParentCycleBudgetSetDetailRespDto> queryTargetParentCycleBudgetSetDetail(@RequestBody(required=false) @Validated BffQueryTargetParentCycleBudgetSetDetailReqDto reqDTO){
        return OkrResult.success(financeService.queryTargetParentCycleBudgetSetDetail(reqDTO));
    }
/**
   * B3查询目标子周期及来源预算设置列表(管理)
   * gen by moon at 2/5/2024, 4:20:56 PM
   */
    @PostMapping("/oms/mgt/finance/queryTargetCycleAndSourceBudgetSetList")
    @ApiOperation(value = "B3查询目标子周期及来源预算设置列表(管理)", response = OkrResult.class)
    public OkrResult<BffQueryTargetCycleAndSourceBudgetSetListRespDto> queryTargetCycleAndSourceBudgetSetList(@RequestBody(required=false) @Validated BffQueryTargetCycleAndSourceBudgetSetListReqDto reqDTO){
        return OkrResult.success(financeService.queryTargetCycleAndSourceBudgetSetList(reqDTO));
    }
/**
   * B3查询目标周期预算设置资金来源列表(管理)
   * gen by moon at 2/5/2024, 9:17:26 PM
   */
    @PostMapping("/oms/mgt/finance/queryTargetCycleBudgetSetSourceList")
    @ApiOperation(value = "B3查询目标周期预算设置资金来源列表(管理)", response = OkrResult.class)
    public OkrResult<BffQueryTargetCycleBudgetSetSourceListRespDto> queryTargetCycleBudgetSetSourceList(@RequestBody(required=false) @Validated BffQueryTargetCycleBudgetSetSourceListReqDto reqDTO){
        return OkrResult.success(financeService.queryTargetCycleBudgetSetSourceList(reqDTO));
    }
/**
   * B3获取目标内容加OR减预算资金来源(管理)
   * gen by moon at 2/5/2024, 9:17:34 PM
   */
    @PostMapping("/oms/mgt/finance/obtainTargetContentAddOrSubBudgetSource")
    @ApiOperation(value = "B3获取目标内容加OR减预算资金来源(管理)", response = OkrResult.class)
    public OkrResult<BffObtainTargetContentAddOrSubBudgetSourceRespDto> obtainTargetContentAddOrSubBudgetSource(@RequestBody(required=false) @Validated BffObtainTargetContentAddOrSubBudgetSourceReqDto reqDTO){
        return OkrResult.success(financeService.obtainTargetContentAddOrSubBudgetSource(reqDTO));
    }
/**
   * B3执行开启或关闭目标预算(管理)
   * gen by moon at 2/19/2024, 7:46:32 PM
   */
    @PostMapping("/oms/mgt/finance/implementOpenOrCloseTargetBudget")
    @ApiOperation(value = "B3执行开启或关闭目标预算(管理)", response = OkrResult.class)
    public OkrResult<BffImplementOpenOrCloseTargetBudgetRespDto> implementOpenOrCloseTargetBudget(@RequestBody(required=false) @Validated BffImplementOpenOrCloseTargetBudgetReqDto reqDTO){
        return OkrResult.success(financeService.implementOpenOrCloseTargetBudget(reqDTO));
    }
/**
   * B3查询目标内容预算子周期列表
   * gen by moon at 2/25/2024, 12:12:12 AM
   */
    @PostMapping("/oms/finance/queryTargetContentBudgetSubCycleList")
    @ApiOperation(value = "B3查询目标内容预算子周期列表", response = OkrResult.class)
    public OkrResult<BffQueryTargetContentBudgetSubCycleListRespDto> queryTargetContentBudgetSubCycleList(@RequestBody(required=false) @Validated BffQueryTargetContentBudgetSubCycleListReqDto reqDTO){
        return OkrResult.success(financeService.queryTargetContentBudgetSubCycleList(reqDTO));
    }
/**
   * B3查询目标内容预算设置状态(管理)
   * gen by moon at 2/25/2024, 11:36:29 AM
   */
    @PostMapping("/oms/mgt/finance/queryTargetContentBudgetStateDetail")
    @ApiOperation(value = "B3查询目标内容预算设置状态(管理)", response = OkrResult.class)
    public OkrResult<BffQueryTargetContentBudgetStateDetailRespDto> queryTargetContentBudgetStateDetail(@RequestBody(required=false) @Validated BffQueryTargetContentBudgetStateDetailReqDto reqDTO){
        return OkrResult.success(financeService.queryTargetContentBudgetStateDetail(reqDTO));
    }
/**
   * B7执行清空资金来源预算设置(管理)
   * gen by moon at 2/27/2024, 10:51:01 PM
   */
    @PostMapping("/oms/mgt/finance/implementClearBudgetSourceSet")
    @ApiOperation(value = "B7执行清空资金来源预算设置(管理)", response = OkrResult.class)
    public OkrResult<BffImplementClearBudgetSourceSetRespDto> implementClearBudgetSourceSet(@RequestBody(required=false) @Validated BffImplementClearBudgetSourceSetReqDto reqDTO){
        return OkrResult.success(financeService.implementClearBudgetSourceSet(reqDTO));
    }
/**
   * B3执行目标周期预算设置资金来源(管理)
   * gen by moon at 2/28/2024, 1:23:31 AM
   */
    @PostMapping("/oms/mgt/finance/implementTargetCycleBudgetSetSource")
    @ApiOperation(value = "B3执行目标周期预算设置资金来源(管理)", response = OkrResult.class)
    public OkrResult<BffImplementTargetCycleBudgetSetSourceRespDto> implementTargetCycleBudgetSetSource(@RequestBody(required=false) @Validated BffImplementTargetCycleBudgetSetSourceReqDto reqDTO){
        return OkrResult.success(financeService.implementTargetCycleBudgetSetSource(reqDTO));
    }
/**
   * B3查询目标内容资金来源预算设置列表(管理)
   * gen by moon at 2/28/2024, 12:39:54 PM
   */
    @PostMapping("/oms/mgt/finance/queryTargetConBudgetSourceSetList")
    @ApiOperation(value = "B3查询目标内容资金来源预算设置列表(管理)", response = OkrResult.class)
    public OkrResult<BffQueryTargetConBudgetSourceSetListRespDto> queryTargetConBudgetSourceSetList(@RequestBody(required=false) @Validated BffQueryTargetConBudgetSourceSetListReqDto reqDTO){
        return OkrResult.success(financeService.queryTargetConBudgetSourceSetList(reqDTO));
    }
}
